/**
 * Select 组件的主题配置
 * 
 * 基于企业级设计规范 (Select.json) 的完整配置
 * 包含所有选择器样式定义
 */

import type { ComponentToken } from 'antd/es/select/style';

// ========== 设计 Token 常量 ==========

/**
 * 选项相关 Token
 */
const OPTION_TOKENS = {
  // 选中状态
  selectedBg: '#e6f4ff',
  selectedColor: '#1a1a1a',
  selectedFontWeight: 600,
  
  // 激活状态
  activeBg: '#f5f5f5',
  
  // 间距
  padding: '4px 8px',
  lineHeight: 1.5,
} as const;

/**
 * 多选相关 Token
 */
const MULTIPLE_TOKENS = {
  // 项目样式
  itemHeight: 24,
  itemBorderRadius: 4,
  
  // 禁用背景
  selectorBgDisabled: '#f5f5f5',
} as const;

/**
 * Select 完整主题配置
 * 
 * 根据设计规范文件 Select.json 定义的企业级选择器样式
 * 涵盖所有选择器状态的完整配置
 * 
 * @example
 * ```tsx
 * <ConfigProvider theme={{ components: { Select: selectThemeConfig } }}>
 *   <Select placeholder="请选择">
 *     <Select.Option value="1">选项1</Select.Option>
 *     <Select.Option value="2">选项2</Select.Option>
 *   </Select>
 *   
 *   <Select mode="multiple" placeholder="多选">
 *     <Select.Option value="1">选项1</Select.Option>
 *     <Select.Option value="2">选项2</Select.Option>
 *   </Select>
 * </ConfigProvider>
 * ```
 */
export const selectThemeConfig: Partial<ComponentToken> = {
  // ========== 选项配置 ==========
  optionSelectedBg: OPTION_TOKENS.selectedBg,
  optionSelectedColor: OPTION_TOKENS.selectedColor,
  optionSelectedFontWeight: OPTION_TOKENS.selectedFontWeight,
  optionActiveBg: OPTION_TOKENS.activeBg,
  optionPadding: OPTION_TOKENS.padding,
  optionLineHeight: OPTION_TOKENS.lineHeight,
  
  // ========== 多选配置 ==========
  multipleItemHeight: MULTIPLE_TOKENS.itemHeight,
  multipleItemBorderColor: 'transparent',
  multipleItemBorderColorDisabled: 'transparent',
  multipleSelectorBgDisabled: MULTIPLE_TOKENS.selectorBgDisabled,
};

/**
 * 获取 Select 主题配置
 * 
 * 支持部分覆盖默认配置，可以基于完整的设计规范进行定制
 * 
 * @param customConfig 自定义配置（可选）
 * @returns 合并后的主题配置
 * 
 * @example
 * ```tsx
 * // 基于设计规范的定制
 * const mySelectTheme = getSelectTheme({
 *   optionSelectedBg: '#e6f7ff',       // 自定义选中背景色
 *   optionActiveBg: '#f0f0f0',         // 自定义激活背景色
 *   multipleItemHeight: 28,            // 自定义多选项目高度
 * });
 * 
 * <ConfigProvider theme={{ components: { Select: mySelectTheme } }}>
 *   <Select placeholder="自定义选择器" />
 * </ConfigProvider>
 * ```
 */
export const getSelectTheme = (
  customConfig?: Partial<ComponentToken>
): Partial<ComponentToken> => {
  return {
    ...selectThemeConfig,
    ...customConfig,
  };
};

/**
 * 导出 Select 组件的 Token 类型
 * 方便 TypeScript 类型检查和开发时的智能提示
 */
export type { ComponentToken as SelectComponentToken } from 'antd/es/select/style';

